package com.zhuang.queue;

import java.util.Deque;
import java.util.LinkedList;
import java.util.Queue;

public class QueueDemo {

	public static void main(String[] args) {
		// testQueue();
		testDeque();

	}

	public static void testQueue() {
		Queue<Integer> queue = new LinkedList<>();
		// boolean add(E e) 向队列中添加一个元素；如果有空间则添加成功返回true，否则则抛出IllegalStateException异常
		queue.add(1);
		queue.add(4);
		queue.add(5);
		// boolean offer(E e) 向队列中添加一个元素；如果有空间则添加成功返回true，否则返回false
		queue.offer(2);
		// E remove() 从队列中删除一个元素；如果元素存在则返回队首元素，否则抛出NoSuchElementException异常\
		// 删除队列的头部
		queue.remove();
		// E poll(); 从队列中删除一个元素；如果元素存在则返回队首元素，否则返回null
		queue.poll();
		// E element() 从队列获取一个元素，但是不删除；如果元素存在则返回队首元素，否则抛出NoSuchElementException异常
		Integer element = queue.element();
		System.out.println(element);
		// E peek() 从队列获取一个元素，但是不删除；如果元素存在则返回队首元素，否则返回null
		Integer peek = queue.peek();
		System.out.println(peek);
		System.out.println(queue);
	}

	public static void testDeque() {
		Deque<Integer> deque = new LinkedList<>();
		deque.addFirst(1);
		deque.addFirst(3);
		deque.addFirst(7);
		deque.addFirst(9);
		deque.addFirst(11);
		deque.addFirst(22);
		deque.addFirst(35);
		System.out.println(deque);
		// void addFirst(E e); 向队首添加一个元素；如果有空间则添加成功返回true，否则则抛出`IllegalStateException`异常
		deque.addFirst(1);
		// void addLast(E e); 向队尾添加一个元素；如果有空间则添加成功返回true，否则则抛出`IllegalStateException`异常
		deque.addLast(20);
		// boolean offerFirst(E e); 向队首添加一个元素；如果有空间则添加成功返回true，否则返回false
		deque.offerFirst(5);
		// boolean offerLast(E e); 向队尾添加一个元素；如果有空间则添加成功返回true，否则返回false
		deque.offerLast(21);
		// E removeFirst(); 从队首删除一个元素；如果元素存在则返回队首元素，否则抛出`NoSuchElementException`异常
		Integer removeFirst = deque.removeFirst();
		System.out.println(removeFirst);
		// E removeLast(); 从队尾删除一个元素；如果元素存在则返回队尾元素，否则抛出`NoSuchElementException`异常
		Integer removeLast = deque.removeLast();
		System.out.println(removeLast);
		// E pollFirst(); 从队首删除一个元素；如果元素存在则返回队首元素，否则返回null
		Integer pollFirst = deque.pollFirst();
		System.out.println(pollFirst);
		// E pollLast(); 从队尾删除一个元素；如果元素存在则返回队首元素，否则返回null
		Integer pollLast = deque.pollLast();
		System.out.println(pollLast);
		// E getFirst(); 从队首获取一个元素，但是不删除；如果元素存在则返回队首元素，否则抛出`NoSuchElementException`异常
		Integer getFirst = deque.getFirst();
		System.out.println(getFirst);
		// E getLast(); 从队尾获取一个元素，但是不删除；如果元素存在则返回队尾元素，否则抛出`NoSuchElementException`异常
		Integer getLast = deque.getLast();
		System.out.println(getLast);
		// E peekFirst(); 从队首获取一个元素，但是不删除；如果元素存在则返回队首元素，否则返回null
		Integer peekFirst = deque.peekFirst();
		System.out.println(peekFirst);
		// E peekLast(); 从队尾获取一个元素，但是不删除；如果元素存在则返回队尾元素，否则返回null
		Integer peekLast = deque.peekLast();
		System.out.println(peekLast);
		System.out.println(deque);
	}
}
